package com.naiterui.ehp.bs.doctor.service;

import java.util.List;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.naiterui.common.repository.page.PageParamVO;
import com.naiterui.common.repository.page.PageVO;
import com.naiterui.ehp.bp.domain.MessagePushHistory;
import com.naiterui.ehp.bp.support.exception.BusinessException;
import com.naiterui.ehp.bs.doctor.vo.BaseInfoVO;
import com.naiterui.ehp.bs.doctor.vo.LateNoticeVO;
import com.naiterui.ehp.bs.doctor.vo.NoticeListTypeVO;
import com.naiterui.ehp.bs.doctor.vo.NoticePageVO;
import com.naiterui.ehp.bs.doctor.vo.SpreadAppVo;
import com.naiterui.ehp.bs.doctor.vo.SpreadVo;
import com.naiterui.ehp.bs.doctor.vo.StartInfoVO;

public interface IIndexService {


    /**
     * <根据医生id获取推广二维码>
     * <详细描述>
     *
     * @param doctorId
     *
     * @return
     *
     * @throws BusinessException SpreadVo <返回值描述>
     * @Throws 异常信息
     * @History 2015年6月26日 上午11:10:45 by chenlin
     */
    SpreadVo findSpreadByDoctorId(Long doctorId) throws BusinessException;


    /**
     * <h5页获取医生分享数据--推广二维码>
     *
     * @param doctorId
     * @param type
     *
     * @return
     *
     * @throws BusinessException AppSpreadVo <返回值描述>
     * @Throws 异常信息
     * @History 2015年11月12日 下午5:35:35 by chenlin
     */
    SpreadAppVo getAppSpreadInfo(Long doctorId, int type) throws BusinessException;

    /**
     * 新-APP端首页数据(带banner)
     * IIndexService.getIndexBaseInfo()
     *
     * @param doctorId
     *
     * @return
     *
     * @throws BusinessException
     * @throws JsonProcessingException
     * @Date 2016年1月13日
     * @since 1.2.0
     */
    BaseInfoVO getIndexBaseInfo(Long doctorId) throws BusinessException, JsonProcessingException;

    /**
     * 获取各种动态分页数据
     * IIndexService.getUserDynamics()
     *
     * @param doctorId
     * @param page
     *
     * @return
     *
     * @Date 2016年1月14日
     * @since 2.0.0
     */
    PageVO<MessagePushHistory> getUserDynamics(Long doctorId, PageParamVO page);

    /**
     * 获取系统公告分页数据
     * IIndexService.getNoticePage()
     *
     * @param limitId
     * @param doctorId
     * @param sort
     * @param topic
     * @param pageParam
     *
     * @return
     *
     * @throws BusinessException
     * @Date 2016年1月15日
     * @since 2.0.0
     */
    PageVO<NoticePageVO> getNoticePage(Long doctorId, Integer sort, String limitTime, Long topic, PageParamVO pageParam) throws BusinessException;

    /**
     * 获取系统公告详情
     * IIndexService.getNoticeDetail()
     *
     * @param noticeId
     *
     * @return
     *
     * @throws BusinessException
     * @Date 2016年1月15日
     * @since 2.0.0
     */
    NoticePageVO getNoticeDetail(Long doctorId, Long noticeId) throws BusinessException;

    /**
     * Banner图计数
     * IIndexService.countBannerReadNum()
     *
     * @param doctorId
     * @param bannerId
     *
     * @Author YongYang
     * @Date 2016年6月24日
     * @since 1.0.0
     */
    void countBannerReadNum(Long doctorId, Long bannerId);

    /**
     * 获取首页启动图接口
     * IIndexService.getStartInfo()
     *
     * @param doctorId
     *
     * @return
     *
     * @throws BusinessException
     * @throws Exception
     * @author fangguanhong
     * @Date 2018年4月25日
     * @since 1.0.0
     */
    StartInfoVO getStartInfo(Long doctorId) throws BusinessException, Exception;

    /**
     * 系统公告列表类型
     * IIndexService.getNoticeListType()
     *
     * @param doctorId
     *
     * @return
     *
     * @Author lichaopi
     * @Date 2018年7月26日
     * @since 1.0.0
     */
    List<NoticeListTypeVO> getNoticeListType(Long doctorId) throws Exception;

    /**
     * 查询最近一条公告或通知
     * IIndexService.getLateNotice()
     *
     * @param doctorId
     *
     * @return
     *
     * @Author lichaopi
     * @Date 2018年7月26日
     * @since 1.0.0
     */
    LateNoticeVO getLateNotice(Long doctorId) throws Exception;
}
